package modelo;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;

public class CategoriaDAO {
	protected TreeMap<Integer, Categoria> elementos = new TreeMap<Integer, Categoria>();
	
	public CategoriaDAO() {
		super();
	}

	public void cargar() {
		ArrayList<Categoria> arr = Datos.getInstancia().leerBaseDatos("categoria", new CreadorDato<Categoria>() {
			@Override
			public Categoria crear(ResultSet rs) throws SQLException {
				return new Categoria(rs.getInt("codigo"), rs.getString("nombre"));
			}
		});
		
		for (Categoria cat : arr)
			elementos.put(cat.getCodigo(), cat);
	}

	public Categoria anadir(String nombre) {
		try {
			ResultSet rs = Conexion.consultar("INSERT INTO categoria (nombre) VALUES ('" + nombre + "') RETURNING codigo;");
			if (rs.next()) {
				Categoria cat = new Categoria(rs.getInt("codigo"), nombre);
				elementos.put(cat.getCodigo(), cat);
				return cat;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return null;
	}

	public void actualizar(Categoria cat) {
		String cadena = "UPDATE categoria SET nombre = '" + cat.getNombre() + "' WHERE codigo = " + cat.getCodigo();
		Conexion.ejecutar(cadena);
	}
	
	public void eliminar(int codigo) {
		String cadena = "DELETE FROM categoria WHERE codigo = " + codigo;
		Conexion.ejecutar(cadena);
		elementos.remove(codigo);
	}
	
	public Categoria buscar(int codigo) {
		return elementos.get(codigo);
	}
	
	public ArrayList<Categoria> categoriasGeneral() {
		return adjuntarObjeto(Conexion.consultar("SELECT codigo FROM categoria"));
	}
	
	private ArrayList<Categoria> adjuntarObjeto(ResultSet rs) {
		ArrayList<Categoria> lst = new ArrayList<Categoria>();
		
		try {
			while (rs.next()) lst.add(elementos.get(rs.getInt("codigo")));
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return lst;
	}
}
